////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  afbafelements.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "afbafelements.h"
#include "parametersetmanager.h"

AFBAFELEMENTS_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixBAFTypeClass::chromatixBAFTypeClass(
    const CHAR* name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, 0, 0, 0, 0)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(sets);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixBAFTypeClass::chromatixBAFTypeClass(
    const CHAR* name,
    UINT32 modeId,
    UINT16 mode,
    UINT16 subMode,
    UINT32 group)
    : ParameterModule(name, MAJOR, MINOR, PATCH, modeId, mode, subMode, group)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(parameter_version);
    PARAMETER_INITIALIZE(sets);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixBAFTypeClass::~chromatixBAFTypeClass()
{
    UnloadchromatixBAFType(this);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetName
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* chromatixBAFTypeClass::GetName(
    const CHAR* type)
{
    const CHAR* name = type;
    CHAR temp[ParameterFileSymbolTableEntry::TYPE_LEN + 1];
    if (PARAMETER_STRCMP(type, ParameterFileSymbolTableEntry::GetType(temp, "chromatixBAF")) == 0)
    {
        name = "chromatixBAF";
    }
    return name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTouchROISettingsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixTouchROISettingsType(
    ParameterFileSymbolTableEntry* entry,
    chromatixTouchROISettingsType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadFloat(&structure->touchScalingFactorNormalLight);
    result = result && entry->ReadFloat(&structure->touchScalingFactorLowLight);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFScalerSettings
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFScalerSettings(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFScalerSettings* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->scalerEnable);
    result = result && entry->ReadInt32(&structure->MNScalerMval);
    result = result && entry->ReadInt32(&structure->MNScalerNval);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFFIRType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFFIRType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFFIRType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->FIREnable);
    for (UINT32 i = 0; result && i < 13; i++)
    {
        result = result && entry->ReadFloat(&structure->coefficients[i]);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFIIRType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFIIRType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFIIRType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->IIREnable);
    for (UINT32 i = 0; result && i < 10; i++)
    {
        result = result && entry->ReadFloat(&structure->coefficients[i]);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFHVFilterSettingsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFHVFilterSettingsType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFHVFilterSettingsType* structure)
{
    BOOL result = TRUE;
    result = result && LoadchromatixBAFIIRType(entry, &structure->IIR);
    result = result && LoadchromatixBAFFIRType(entry, &structure->FIR);
    result = result && entry->ReadInt32(&structure->nFilterShiftBits);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFCoringType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFCoringType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFCoringType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->coringEnable);
    for (UINT32 i = 0; result && i < 17; i++)
    {
        result = result && entry->ReadInt32(&structure->LUT[i]);
    }
    result = result && entry->ReadInt32(&structure->coringThreshold);
    result = result && entry->ReadInt32(&structure->coringGain);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFilterSettingsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFilterSettingsType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFilterSettingsType* structure)
{
    BOOL result = TRUE;
    structure->presetID = (chromatixBAFPresetEnumType)entry->ReadEnum(&result);
    result = result && LoadchromatixBAFCoringType(entry, &structure->coring);
    result = result && LoadchromatixBAFHVFilterSettingsType(entry, &structure->filterCustom);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFFilterType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFFilterType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFFilterType* structure)
{
    BOOL result = TRUE;
    for (UINT32 i = 0; result && i < 2; i++)
    {
        result = result && LoadchromatixBAFilterSettingsType(entry, &structure->HVFilter[i]);
    }
    result = result && LoadchromatixBAFScalerSettings(entry, &structure->scaler);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFChannelSettings
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFChannelSettings(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFChannelSettings* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->ChannelSelect);
    result = result && entry->ReadInt32(&structure->gbgrChannelSelect);
    result = result && entry->ReadInt32(&structure->yConversionEnable);
    for (UINT32 i = 0; result && i < 3; i++)
    {
        result = result && entry->ReadFloat(&structure->RGBToYCoefficients[i]);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFGammaType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFGammaType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFGammaType* structure)
{
    BOOL result = TRUE;
    result = result && LoadchromatixBAFChannelSettings(entry, &structure->channelSettings);
    result = result && entry->ReadInt32(&structure->gammaEnable);
    for (UINT32 i = 0; result && i < 32; i++)
    {
        result = result && entry->ReadInt32(&structure->gammaLUT[i]);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFGammaParamType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFGammaParamType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFGammaParamType* structure)
{
    BOOL result = TRUE;
    structure->presetID = (chromatixBAFPresetEnumType)entry->ReadEnum(&result);
    result = result && LoadchromatixBAFGammaType(entry, &structure->gammaCustom);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFROISettingsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFROISettingsType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFROISettingsType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->flag);
    result = result && entry->ReadFloat(&structure->startXOffset);
    result = result && entry->ReadFloat(&structure->startYOffset);
    result = result && entry->ReadFloat(&structure->widthRatio);
    result = result && entry->ReadFloat(&structure->heightRatio);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFROIParamsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFROIParamsType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFROIParamsType* structure)
{
    BOOL result = TRUE;
    structure->presetID = (chromatixBAFROIPatternEnumType)entry->ReadEnum(&result);
    result = result && entry->ReadFloat(&structure->widthRatio);
    result = result && entry->ReadFloat(&structure->heightRatio);
    result = result && entry->ReadFloat(&structure->gridSizeH);
    result = result && entry->ReadFloat(&structure->gridSizeV);
    result = result && entry->ReadFloat(&structure->gridGapH);
    result = result && entry->ReadFloat(&structure->gridGapV);
    result = result && entry->ReadInt32(&structure->numROI);

    // Reading structure->ROICustom from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->ROICustomCount);
        structure->ROICustomID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->ROICustom   = PARAMETER_NEW chromatixBAFROISettingsType[structure->ROICustomCount];
        }
        if (!result || structure->ROICustom == NULL)
        {
            structure->ROICustomCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->ROICustomCount; i++)
        {
            result = result && LoadchromatixBAFROISettingsType(pointerEntry1, &structure->ROICustom[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFSetType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFSetType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFSetType* structure)
{
    BOOL result = TRUE;
    structure->BAFID = (chromatixBAFSetType::BAFIDEnum)entry->ReadEnum(&result);
    for (UINT32 i = 0; result && i < 4; i++)
    {
        result = result && LoadchromatixBAFROIParamsType(entry, &structure->ROIConfig[i]);
    }
    for (UINT32 i = 0; result && i < 4; i++)
    {
        result = result && LoadchromatixBAFGammaParamType(entry, &structure->gamma[i]);
    }
    for (UINT32 i = 0; result && i < 4; i++)
    {
        result = result && LoadchromatixBAFFilterType(entry, &structure->filter[i]);
    }
    result = result && LoadchromatixTouchROISettingsType(entry, &structure->touchROI);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFSetsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFSetsType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFSetsType* structure)
{
    BOOL result = TRUE;
    result = result && LoadchromatixBAFSetType(entry, &structure->elements);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixBAFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::LoadchromatixBAFType(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFType* structure)
{
    BOOL result = TRUE;
    result = result && Loadmodule_versionStruct(entry, &structure->module_version);
    result = result && Loadparameter_versionStruct(entry, &structure->parameter_version);
    result = result && LoadchromatixBAFSetsType(entry, &structure->sets);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::Loadmodule_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFType::module_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load parameter_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixBAFTypeClass::Loadparameter_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixBAFType::parameter_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixBAFROIParamsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixBAFTypeClass::UnloadchromatixBAFROIParamsType(
    chromatixBAFROIParamsType* structure)
{
    PARAMETER_DELETE[] structure->ROICustom;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixBAFSetType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixBAFTypeClass::UnloadchromatixBAFSetType(
    chromatixBAFSetType* structure)
{
    for (UINT32 i = 0; i < 4; i++)
    {
        UnloadchromatixBAFROIParamsType(&structure->ROIConfig[i]);
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixBAFSetsType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixBAFTypeClass::UnloadchromatixBAFSetsType(
    chromatixBAFSetsType* structure)
{
    UnloadchromatixBAFSetType(&structure->elements);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixBAFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixBAFTypeClass::UnloadchromatixBAFType(
    chromatixBAFType* structure)
{
    UnloadchromatixBAFSetsType(&structure->sets);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Parse symbol table entry, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* chromatixBAFTypeClass::Parse(
    ParameterSetManager* manager,
    ParameterFileSymbolTableEntry* entry) const
{
    chromatixBAFTypeClass* cls = NULL;

    if (PARAMETER_STRCMP(Type, entry->Type) == 0 && Major == entry->Major &&
        Minor == entry->Minor && Patch == entry->Patch)
    {
        cls = PARAMETER_NEW chromatixBAFTypeClass(GetName(entry->Type), 
            entry->ModeId, entry->Mode, entry->SubMode, entry->Group);
        if (cls != NULL)
        {
            BOOL result = TRUE;

            cls->SymbolTableID = entry->ID;
            cls->ID            = entry->ID;

            result = result && LoadchromatixBAFType(entry, cls);

            if (!result)
            {
                PARAMETER_DELETE cls;
                cls = NULL;
            }
        }
    }
    return (ParameterModule*)cls;
}


AFBAFELEMENTS_NAMESPACE_END
